#include<iostream>
using namespace std;
const int N = 1e8 + 10;
typedef long long LL;
LL f[N];
int n = 0;
int main()
{
	cin >> n;
	LL sum = ((n + 1) * n) / 2;
	//如果这个sum是奇数那他根本就不能拆成两个数
	if (sum % 2 == 1)
	{
		cout << 0 << endl;
		return 0;
	}
	//状态表示是前i个挑，挑出来和恰好为j的
	//这种挑数求和的就用动态规划就行了
	sum /= 2;
	f[0] = 1;
	for (int i = 1;i <= n;i++)
	{
		for (int j = sum;j >= i;j--)
		{
			f[j] += f[j - i];
		}
	}
	cout << f[sum] / 2<<endl;
	return 0;
}